Computer systems are commonly used for displaying graphical objects on a display screen. These graphical objects include points, lines, polygons, and three dimensional solid objects. By utilizing texture mapping techniques, color and other details can be applied to areas and surfaces of these objects. In texture mapping, a pattern image or texture map is combined with an area or surface of an object to produce a modified object with the added detail of the texture map. For example, given the outline of a featureless cube and a texture map defining a wood grain pattern, texture mapping techniques can be used to map the wood grain pattern onto the cube. The resulting display is that of a cube that appears to be made of wood. In another example, vegetation and trees can be added by texture mapping to an otherwise barren terra model. Labels can be applied on computer-modeled package designs for visually conveying the appearance of an actual product. Furthermore, textures mapped onto geometric surfaces provide additional motion and spatial cues that surface shading alone might not be capable of providing. For example, a sphere rotating about its center appears static until an irregular texture or pattern is affixed to its surface.
Texture mapping involves using a texture having a function defined in texture space. The texture is then warped or mapped into an object space. Typically, a two-dimensional texture or pattern image is mapped onto a three-dimensional surface. This can be accomplished by associating a two-dimensional index (S,T) into an array of texture pixels (texels) in reference to points on the three dimensional surface. As the surface is rendered, the S and T values are interpolated and used to look up a texture value for each rendered pixel. The interpolated S and T values are generally not integer values. Consequently, these values often fall between the texture samples represented by the array of texels.
Several options exist for selecting a texture value, given real S and T values. One of the simplest options is to round S and T to the nearest integers and then select the texel corresponding to the rounded integer values. A more accurate representation is produced by interpolating between the four nearest samples that surround the real (S,T) location. Sometimes, a bi-linear interpolation algorithm is used in other instances, higher-order interpolation algorithms are used for better results.
One potential problem with these unsophisticated selection processes described above is that, if the surface being texture-mapped is far from the viewpoint, severe aliasing of the texture may occur. This undesirable aliasing occurs because the interpolated (S,T) values may skip over large areas of the texture. A prior art technique, referred to as MIP-mapping, address this problem by precomputing multiple, filtered copies of the texture at successively lower resolutions. For example, a 256.times.256 texel array would be filtered and resampled to obtain maps at 128.times.128, 64.times.64, 32.times.32, 16.times.16, 8.times.8, 4.times.4, and 2.times.2 resolutions. The particular size of the texel array is chosen based on a computer parameter known as a level of detail (LOD). The LOD represents the relative distances between the interpolated (S,T) values. Each map size represents an integer LOD, and the computed LOD values are real numbers. High quality texture mapping is obtained by performing bi-linear interpolation in the map representing the integer LOD immediately above and below the computed LOD of each pixel. Next, a linear interpolation is performed between the integer LOD's to obtain the texture value at the non-integer LOD. This process is known as tri-linear MIP-mapping.
Another problem is that in high performance computer graphics systems, the rendering operations are typically distributed among a number of processors. If this parallel organization were used to perform texture mapping, each processor would likely contain a copy of the entire texture map in its associated memory. This multiple storage of the entire texture map is both redundant and inefficient.
Yet another problem is that the transfer of data between the various processors and the memory consumes a great deal of the limited bandwidth. Allocating valuable bandwidth for this function tends to slow down the exchange of other needed information. Hence, the overall effect is that this imposes a heavy burden on the texture mapping process.
Thus, there is a need in prior art computer graphics systems for a fast, accurate, and efficient texture mapping process. It would be preferable if such a process could somehow minimize the amount of bandwidth needed for the texture mapping process. It would also be highly preferable if such a process could be implemented with fewer chips and without redundant texture storage.